xen_vm_set_vcpus_params(xen_session *session, xen_vm vm, char *params);
+/**
+ * Set the VCPUs/number field of the given VM.
+ */
+extern bool
+xen_vm_set_vcpus_number(xen_session *session, xen_vm vm, int64_t number);
+
+
/**
* Set the VCPUs/features/force_on field of the given VM.
*/
xen_vm_set_vcpus_features_force_on(xen_session *session, xen_vm vm, struct xen_cpu_feature_set *force_on);
+/**
+ * Add the given value to the VCPUs/features/force_on field of the
+ * given VM. If the value is already in that Set, then do nothing.
+ */
+extern bool
+xen_vm_add_vcpus_features_force_on(xen_session *session, xen_vm vm, enum xen_cpu_feature value);
+
+
+/**
+ * Remove the given value from the VCPUs/features/force_on field of the
+ * given VM. If the value is not in that Set, then do nothing.
+ */
+extern bool
+xen_vm_remove_vcpus_features_force_on(xen_session *session, xen_vm vm, enum xen_cpu_feature value);
+
+
/**
* Set the VCPUs/features/force_off field of the given VM.
*/
xen_vm_set_vcpus_features_force_off(xen_session *session, xen_vm vm, struct xen_cpu_feature_set *force_off);
+/**
+ * Add the given value to the VCPUs/features/force_off field of the
+ * given VM. If the value is already in that Set, then do nothing.
+ */
+extern bool
+xen_vm_add_vcpus_features_force_off(xen_session *session, xen_vm vm, enum xen_cpu_feature value);
+
+
+/**
+ * Remove the given value from the VCPUs/features/force_off field of
+ * the given VM. If the value is not in that Set, then do nothing.
+ */
+extern bool
+xen_vm_remove_vcpus_features_force_off(xen_session *session, xen_vm vm, enum xen_cpu_feature value);
+
+
/**
* Set the actions/after_shutdown field of the given VM.
*/
}
+bool
+xen_vm_set_vcpus_number(xen_session *session, xen_vm vm, int64_t number)
+{
+ abstract_value param_values[] =
+ {
+ { .type = &abstract_type_string,
+ .u.string_val = vm },
+ { .type = &abstract_type_int,
+ .u.int_val = number }
+ };
+
+ xen_call_(session, "VM.set_VCPUs_number", param_values, 2, NULL, NULL);
+ return session->ok;
+}
+
+
bool
xen_vm_set_vcpus_features_force_on(xen_session *session, xen_vm vm, struct xen_cpu_feature_set *force_on)
{
}
+bool
+xen_vm_add_vcpus_features_force_on(xen_session *session, xen_vm vm, enum xen_cpu_feature value)
+{
+ abstract_value param_values[] =
+ {
+ { .type = &abstract_type_string,
+ .u.string_val = vm },
+ { .type = &xen_cpu_feature_abstract_type_,
+ .u.string_val = xen_cpu_feature_to_string(value) }
+ };
+
+ xen_call_(session, "VM.add_VCPUs_features_force_on", param_values, 2, NULL, NULL);
+ return session->ok;
+}
+
+
+bool
+xen_vm_remove_vcpus_features_force_on(xen_session *session, xen_vm vm, enum xen_cpu_feature value)
+{
+ abstract_value param_values[] =
+ {
+ { .type = &abstract_type_string,
+ .u.string_val = vm },
+ { .type = &xen_cpu_feature_abstract_type_,
+ .u.string_val = xen_cpu_feature_to_string(value) }
+ };
+
+ xen_call_(session, "VM.remove_VCPUs_features_force_on", param_values, 2, NULL, NULL);
+ return session->ok;
+}
+
+
bool
xen_vm_set_vcpus_features_force_off(xen_session *session, xen_vm vm, struct xen_cpu_feature_set *force_off)
{
}
+bool
+xen_vm_add_vcpus_features_force_off(xen_session *session, xen_vm vm, enum xen_cpu_feature value)
+{
+ abstract_value param_values[] =
+ {
+ { .type = &abstract_type_string,
+ .u.string_val = vm },
+ { .type = &xen_cpu_feature_abstract_type_,
+ .u.string_val = xen_cpu_feature_to_string(value) }
+ };
+
+ xen_call_(session, "VM.add_VCPUs_features_force_off", param_values, 2, NULL, NULL);
+ return session->ok;
+}
+
+
+bool
+xen_vm_remove_vcpus_features_force_off(xen_session *session, xen_vm vm, enum xen_cpu_feature value)
+{
+ abstract_value param_values[] =
+ {
+ { .type = &abstract_type_string,
+ .u.string_val = vm },
+ { .type = &xen_cpu_feature_abstract_type_,
+ .u.string_val = xen_cpu_feature_to_string(value) }
+ };
+
+ xen_call_(session, "VM.remove_VCPUs_features_force_off", param_values, 2, NULL, NULL);
+ return session->ok;
+}
+
+
bool
xen_vm_set_actions_after_shutdown(xen_session *session, xen_vm vm, enum xen_on_normal_exit after_shutdown)
{